package com.demo.java.OD451_500.OD488;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【水仙花数II(字符串分割)(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146420184
 */
public class OdMain {
    public static LinkedList<Integer> resList = new LinkedList<>();

    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();  // 读取输入的字符串
        int count = 2;  // 分割计数器，初始为2
        find(line, count);  // 调用递归方法进行查找

        int result = 0;
        // 如果找到符合条件的分割，则输出对应的分割次数
        if (resList.size() > 1) {
            result = -1;  // 如果有多次分割符合条件，则返回 -1
        } else if (resList.size() == 1) {
            result = resList.get(0);  // 输出符合条件的分割次数
        }

        System.out.println(result);  // 输出结果
    }

    // 递归求解
    public static void find(String line, int count) {
        for (int i = 1; i < line.length(); i++) {
            String sub1 = line.substring(0, i);  // 获取第一个子串
            String sub2 = line.substring(i);  // 获取第二个子串

            // 如果两个子串的 ASCII 和是水仙花数，则记录当前分割次数
            if (check(get_sum(sub1))) {
                if (check(get_sum(sub2))) {
                    resList.add(count);  // 记录分割次数
                } else {
                    find(sub2, count + 1);  // 递归处理第二个子串
                }
            }
        }
    }

    // 获取字符串的 ASCII 值之和
    public static int get_sum(String str) {
        int sum = 0;
        char[] chars = str.toCharArray();  // 将字符串转为字符数组
        for (int i = 0; i < str.length(); i++) {
            sum += chars[i];  // 累加每个字符的 ASCII 值
        }
        return sum;
    }

    // 判断给定的整数是否为水仙花数
    public static boolean check(int sum) {
        // 获取数字的每一位并计算每一位的立方和
        int i = sum % 10;
        int j = sum / 10 % 10;
        int k = sum / 100;
        return i * i * i + j * j * j + k * k * k == sum;  // 判断是否为水仙花数
    }
}